package org.example.operator.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *  案例实操
 *
 */
object Spark03_RDD_Operator_CountByKey {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val context = new SparkContext(conf)

    val rdd: RDD[Int] = context.makeRDD(List(1,2,3,4),2)

    /**
      * 由于上面的rdd，没有key，只有数字的列表，所以
      * 只能调用countByValue，
      * 此行动算子，将会返回一个map
      * map的key是rdd元素的元素，value是他出现的次数
      */
    val intToLong: collection.Map[Int, Long] = rdd.countByValue()

    val rdd2: RDD[(String, Int)] = context.makeRDD(List(
      ("a", 1),
      ("a", 1),
      ("a", 1),
      ("b", 1)), 2)
    val stringToLong: collection.Map[String, Long] = rdd2.countByKey()
    // 请注意，这里并不会和reducebykey一样，去聚合相同key的value
    // 而是知识单纯的计算值

    context.stop()
  }
}
